package context

import (
	"github.com/gookit/validate"
	"ksd-social-api/commons/lib"
	"time"
)

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc  管理员修改用户数据的载体
 */
type AdminUserPasswordContext struct {
	SystemId   uint64     `json:"systemId"`
	SystemName string     `json:"systemName"`
	UserId     lib.BigInt `json:"userId"`   // 修改那个用户的id
	Password   string     `json:"password"` // 密码
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc  管理员修改用户数据的载体
 */
type AdminUserTelephoneContext struct {
	SystemId   uint64     `json:"systemId"`
	SystemName string     `json:"systemName"`
	UserId     lib.BigInt `json:"userId"`    // 修改那个用户的id
	Telephone  string     `json:"telephone"` // 手机
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc  管理员修改用户数据的载体
 */
type UserPwdContext struct {
	SystemId        uint64 `json:"systemId"`
	SystemName      string `json:"systemName"`
	Uuid            string `json:"uuid"`                                                    //用户UUID
	UserId          uint   `validate:"required|gt:0" json:"userId"`                         // 修改那个用户的id
	Password        string `validate:"required|minLen:6|maxLen:16" json:"password" `        // 密码
	ConfirmPassword string `validate:"required|minLen:6|maxLen:16" json:"confirmPassword" ` // 确认密码
}

// Messages 您可以自定义验证器错误消息
func (f UserPwdContext) Messages() map[string]string {
	return validate.MS{
		"required": "{field}不能为空",
		"gt":       "{field}必须大于0",
		"minLen":   "{field}大于等于6位",
		"maxLen":   "{field}小于等于16位",
	}
}

// Translates 你可以自定义字段翻译
func (f UserPwdContext) Translates() map[string]string {
	return validate.MS{
		"UserId":          "用户IdXXXX",
		"Password":        "密码XXXX",
		"ConfirmPassword": "确认密码XXXX",
	}
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc  修改自己密码的使用
 */
type SysUserPwdContext struct {
	Password        string `validate:"required|minLen:6|maxLen:16" json:"password" `        // 密码
	ConfirmPassword string `validate:"required|minLen:6|maxLen:16" json:"confirmPassword" ` // 确认密码
	SystemId        uint64 `json:"systemId"`
	SystemName      string `json:"systemName"`
}

// Messages 您可以自定义验证器错误消息
func (f SysUserPwdContext) Messages() map[string]string {
	return validate.MS{
		"required": "{field}不能为空",
		"minLen":   "{field}最小6位",
		"maxLen":   "{field}最大16位",
	}
}

// Translates 你可以自定义字段翻译
func (f SysUserPwdContext) Translates() map[string]string {
	return validate.MS{
		"Password":        "新密码",
		"ConfirmPassword": "确认密码",
	}
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc 绑定用户手机
 */
type UserBindPhoneContext struct {
	Telephone  string `validate:"required|cnMobile" json:"telephone"` // 手机号码
	PhoneCode  string `validate:"required|len:6" json:"phoneCode"`    // 手机短信验证码
	SystemId   uint64 `json:"systemId"`
	SystemName string `json:"systemName"`
}

// Messages 您可以自定义验证器错误消息
func (f UserBindPhoneContext) Messages() map[string]string {
	return validate.MS{
		"required": "{field}不能为空",
		"len":      "{field}必须是6位",
	}
}

// Translates 你可以自定义字段翻译
func (f UserBindPhoneContext) Translates() map[string]string {
	return validate.MS{
		"Telephone": "绑定手机号码",
		"PhoneCode": "手机短信码",
	}
}

/**
 * @author feige
 * @date 2023-10-12
 * @version 1.0
 * @desc 用户基本信息上下文
 */
type UserInfoContext struct {
	// 用户ID
	Id uint64 `json:"id"`
	// 昵称
	Username string `validate:"required" json:"username"`
	// 昵称
	Account string `json:"account"`
	// 昵称
	Nickname string `validate:"required" json:"nickname"`
	// 头像
	Avatar string `validate:"required" json:"avatar"`
	// 地址
	Address string `json:"address"`
	// 手机号码
	Telephone string `json:"telephone"`
	// 生日
	BirthDay string `json:"birthDay"`
	// 性别 0女 1男 2 保密
	Male int ` json:"male"`
	// 省份
	Province string `json:"province"`
	// 城市
	City string `json:"city"`
	// 职业
	Job   string `json:"job"`
	Intro string `json:"intro"`
	// 系统
	SystemId   uint64 `json:"systemId"`
	SystemName string `json:"systemName"`
}

// Messages 您可以自定义验证器错误消息
func (f UserInfoContext) Messages() map[string]string {
	return validate.MS{
		"required": "{field}不能为空",
	}
}

// Translates 你可以自定义字段翻译
func (f UserInfoContext) Translates() map[string]string {
	return validate.MS{
		"Nickname": "昵称",
		"Username": "昵称",
		"Avatar":   "头像",
	}
}

/**
 * @desc 关注列表分页
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserFocusPageContext struct {
	PageNo     int64  `json:"pageNo"`   // 第几页
	PageSize   int64  `json:"pageSize"` // 每页显示多少条
	UserId     uint64 `json:"userId"`   // 用户ID
	SystemId   uint64 `json:"systemId"`
	SystemName string `json:"systemName"`
}

/**
 * @desc 关注和取消关注
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserFocusContext struct {
	UserId        uint64     `json:"userId"`        // 用户ID
	Uuid          string     `json:"uuid"`          // 用户UUID
	FocusId       lib.BigInt `json:"focusId"`       // 关注的用户ID
	FocusUuid     string     `json:"focusUuid"`     // 关注的用户uuid
	Nickname      string     `json:"nickname"`      // 用户昵称
	Username      string     `json:"username"`      // 用户昵称
	Avatar        string     `json:"avatar"`        // 用户头像
	FocusNickname string     `json:"focusNickname"` // 用户昵称
	FocusAvatar   string     `json:"focusAvatar"`   // 用户头像
	SystemId      uint64     `json:"systemId"`
	SystemName    string     `json:"systemName"`
}

/**
 * @desc 关注和取消关注
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserFocusDelContext struct {
	Id         lib.BigInt `json:"id"`      // 删除ID
	UserId     uint64     `json:"userId"`  // 用户ID
	FocusId    lib.BigInt `json:"focusId"` // 关注的用户ID
	SystemId   uint64     `json:"systemId"`
	SystemName string     `json:"systemName"`
}

/**
 * @desc 用户统计模块相关
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserStateModelContext struct {
	Day        int    `json:"day"`    // 天数
	UserId     uint64 `json:"userId"` // 用户ID
	SystemId   uint64 `json:"systemId"`
	SystemName string `json:"systemName"`
}

/*
*
  - @author feige
  - @date 2023-10-13
  - @version 1.0
  - @desc 搜索上下文
*/
type UserSearchContext struct {
	PageNo      int64  `json:"pageNo"`   // 分页
	PageSize    int64  `json:"pageSize"` // 每页显示
	Keyword     string `json:"keyword"`  // 搜索关键词
	Uuid        string `json:"uuid"`     // 搜索关键词
	VipFlag     int    `json:"vipFlag"`
	AuthorFlag  int    `json:"authorFlag"`
	TeacherFlag int    `json:"teacherFlag"`
	Role        string `json:"role"`
	SystemId    uint64 `json:"systemId"`
	Forbidden   int    `json:"forbidden"`
}

type AdminUserVipContext struct {
	VipFlag    lib.BigInt `json:"vipFlag"`
	UserId     lib.BigInt `json:"userId"`
	SystemId   uint64     `json:"systemId"`
	SystemName string     `json:"systemName"`
}

/**
 * @desc 关注和取消关注
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserFocusDelFansContext struct {
	Id         lib.BigInt `json:"id"`      // 删除ID
	UserId     uint64     `json:"userId"`  // 用户ID
	FocusId    uint64     `json:"focusId"` // 关注的用户ID
	SystemId   uint64     `json:"systemId"`
	SystemName string     `json:"systemName"`
}

/**
 * @desc 关注和取消关注
 * @author feige
 * @date 2023-11-14
 * @version 1.0
 */
type UserContext struct {
	Id lib.BigInt `json:"id"` // 删除ID
}

/**
 * @author feige
 * @date 2023-10-08
 * @version 1.0
 * @desc 下载浏览数记录
 */
type UserUpdateContext struct {
	Id       lib.BigInt `json:"id"`
	Field    string     `json:"field"`
	Value    any        `json:"value"`
	SystemId uint64     `json:"systemId"`
}

type UserCodeContext struct {
	Id         string     `json:"id"`         // 业务主键
	Code       string     `json:"code"`       //兑换码
	Mark       int        `json:"mark"`       //是否兑换
	Opid       lib.BigInt `json:"opid"`       //下载
	SystemId   uint64     `json:"systemId"`   // 系统ID
	SystemName string     `json:"systemName"` // 系统名称
	CreateTime time.Time  `json:"createTime"` // 创建时间
	UpdateTime time.Time  `json:"updateTime"` // 更新时间
}

/*
- @author feige
- @date 2023-10-13
- @version 1.0
- @desc 搜索上下文
*/
type CodeSearchContext struct {
	PageNo   int64  `json:"pageNo"`   // 分页
	PageSize int64  `json:"pageSize"` // 每页显示
	Mark     int    `json:"mark"`     // 搜索关键词
	Keyword  string `json:"keyword"`  // 搜索关键词
	SystemId uint64 `json:"systemId"` // 系统编号
}
